Lambdaでawswranglerを使う
CX事業本部の夏目です。
AWSでETL処理を行う際、awswranglerというPythonのモジュールを使うことも少なくありません。
今回はそれをLambdaで使う際にある問題にハマってしまったので共有します。
何が問題なのか
問題は唯一つ、非圧縮時のファイルサイズが大きいこと。
bash-4.2$ python -m venv .venv bash-4.2$ source .venv/bin/activate (.venv) bash-4.2$ pip install --disable-pip-version-check awswrangler==2.11.0 -t python/ 2>&1 > /dev/null (.venv) bash-4.2$ du -sh python 292M python
Lambdaのデプロイパッケージは非圧縮時に250MB以下である必要があります。 が、見ての通り普通にpipでインストールするとオーバーしていることがわかります。
どうすればよいのか
実はawswranglerのgithubのreleaseページでLambda Layerに登録するためのzipファイルが公開されています。
試しにダウンロードして、非圧縮時のサイズを確認してみます。
$ wget https://github.com/awslabs/aws-data-wrangler/releases/download/2.11.0/awswrangler-layer-2.11.0-py3.8.zip > /dev/null 2>&1 $ unzip awswrangler-layer-2.11.0-py3.8.zip > /dev/null 2>&1 $ du -sh python 161M python
こちらはサイズが250MBを下回っています。 これならLayerにデプロイしてLambdaで使用することができます。
まとめ
普段通りにawswranglerをLayerにデプロイしようとして、エラーが出るのは非常に困ってました。 このzipファイルならLayerにデプロイできるのでLambdaで問題なく動かせそうです。